/**
 * 创建XHR对象
 */

 //传统方式，为了兼容低版本IE，执行很多分支，有些浏览器中有些分支是不必要的。可以用惰性模式优化
function createXHR() {
    if (typeof XMLHttpRequest != 'undefined') {
        return new XMLHttpRequest();
    } else if(typeof ActiveXObject != 'undefined') {
        if (typeof arguments.callee.activeXString != 'string') {
            var versions = ['MSXML2.XMLHttp.6.0', 'MSXML2.XMLHttp.3.0', 'MSXML2.XMLHttp'],
                i = 0,
                len = versions.length;
            for(; i < len; i++) {
                try {
                    new ActiveXObject(versions[i]);
                    arguments.callee.activeXString = versions[i];
                    break;
                } catch (error) {
                    
                }
            }
            return new ActiveXObject(arguments.callee.activeXString);
        } else {
            throw new Error('您的浏览器并不支持Ajax.');
        }
    }
}

// 优化一：加载时损失性能，第一次调用时不损失性能
var createXHR = (function() {
    if (typeof XMLHttpRequest != 'undefined') {
        return function() {
            return new XMLHttpRequest();
        }
    } else if(typeof ActiveXObject != 'undefined') {
        return function() {}
    } else {
        return function() {
            throw new Error('No XHR object available');
        }
    }
})();

// 优化二：加载时不损失性能，但是第一次调用时损失性能
function createXHR() {
    if (typeof XMLHttpRequest != 'undefined') {
        createXHR = function() {
            return new XMLHttpRequest();
        }
    } else if(typeof ActiveXObject != 'undefined') {
        createXHR = function() {}
    } else {
        createXHR = function() {
            throw new Error('No XHR object available');
        }
    }
}
